17411
12117
Seznam kontaktů z webové služby a jejich zobrazení v tabulce 'rozdělených' kontaktů kontaktů, jak je vidět na snímku obrazovky.
Problém je, že dostávám stejné hodnoty značek pro zaškrtávací políčka prvního řádku pro sekci A i pro sekci S. Řadil jsem jedno pole a zobrazoval se v indexovaném zobrazení tabulky. Jak získat různé hodnoty značek v závislosti na indexPath.row bez ohledu na počet zobrazených sekcí. Tady je to, co jsem zkoušel
V cellForRowAtIndexPath:
UIButton * checkBox;
if (UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiomPhone)
{
checkBox = [[UIButton alloc] initWithFrame: CGRectMake (7, 8, 30, 30)];
}
jiný
{
checkBox = [[UIButton alloc] initWithFrame: CGRectMake (15, 13, 30, 30)];
}
// int cnt = 0;
// for (int i = indexPath.section - 1; i> 0; i--)
// {
// cnt + = [[objectsForCharacters objectForKey: [arrayOfCharacters objectAtIndex: i]] count]; // arrayOfCharachters má char 'A' až 'Z'
//}
//checkBox.tag = cnt + indexPath.row;
[checkBox setImage: [UIImage imageNamed: @ "checkBox.png"] forState: UIControlStateNormal];
[checkBox addTarget: vlastní akce: @selector (checkBoxClicked :) forControlEvents: UIControlEventTouchUpInside];
[checkBox setTag: indexPath.row];
[cell.contentView addSubview: checkBox];
návratová buňka;
}
- (void) checkBoxClicked: (id) sender
{
CGPoint buttonPosition = [odesílatel convertPoint: CGPointZero toView: self.tableViewContact];
NSIndexPath * indexPath = [self.tableViewContact indexPathForRowAtPoint: buttonPosition];
UIButton * tappedButton = (UIButton *) odesílatel;
NSLog (@ "Číslo značky =% d", [značka odesílatele]);
if ([tappedButton.currentImage isEqual: [UIImage imageNamed: @ "checkBox.png"]]))
{
[sender setImage: [UIImage imageNamed: @ "checkBoxMarked.png"] forState: UIControlStateNormal];
if (indexPath! = Nil)
{
NSString * finalIntId = [mutableArrayOfIds objectAtIndex: indexPath.row]; // uložit ID zaškrtávacích polí do mutableArrayOfIds
NSLog (@ "Označené zaškrtnuté tlačítko id =% @", finalIntId);
[arrayOfIds addObject: finalIntId];
}
// NSString * finalIntId = [mutableArrayOfIds objectAtIndex: tappedButton.tag];
// NSString * finalIntId = [mutableArrayOfIds objectAtIndex: indexPath.row];
}
jiný
{
[sender setImage: [UIImage imageNamed: @ "checkBox.png"] forState: UIControlStateNormal];
NSLog (@ "Nezaškrtnuto");
// [arrayOfIds removeObjectAtIndex: tappedButton.tag];
}
}
- (NSString *) tableView: (UITableView *) tableView titleForHeaderInSection: (NSInteger) sekce {
if ([arrayOfCharacters count] == ​​0)
{
vrátit se @"";
}
návrat [NSString stringWithFormat: @ "% @", [arrayOfCharacters objectAtIndex: sekce]];
}
- (NSArray *) sectionIndexTitlesForTableView: (UITableView *) tableView
{
NSArray * toBeReturned = [NSArray arrayWithArray:
[@ "A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | # "
componentsSeparatedByString: @ "|"]];
návrat doBeReturned;
}
- (NSInteger) tableView: (UITableView *) tableView sectionForSectionIndexTitle: (NSString *) název atIndex: (NSInteger) index
{
Počet NSInteger = 0;
pro (znak NSString * v arrayOfCharacter) {
if ([znak jeEqualToString: název]) {
počet návratů;
}
count ++;
}
návrat 0;
}
- (NSInteger) numberOfSectionsInTableView: (UITableView *) tableView
{
návrat [arrayOfCharacters count];
// návrat 1;
}
- (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: (NSInteger) sekce
{
// návrat [počet mutableArray];
return [[objectsForCharacter objectForKey: [arrayOfCharacter objectAtIndex: section]] count];
} 
nastavujete stejnou hodnotu značky pro všechny sekce, které mají stejný řádek.
Cesta indexPath má dvě vlastnosti, {sekce, řádek}.
Řekněme, že sekce A má dva řádky,
pro řádek1 -> indexPath.section = 0, indexPath.row = 0;
pro řádek2-> indexPath.section = 0, indexPath.row = 1;
Řekněme, že sekce S má dva řádky,
pro řádek1 -> indexPath.section = 1, indexPath.row = 0;
pro řádek2-> indexPath.section = 1, indexPath.row = 1;
Takže pro řádek1 sekce A a řádek1 sekce S nastavujete stejnou hodnotu značky, která je 0. Existuje váš problém.
Zkuste nastavit hodnotu značky, jak je uvedeno níže.
button.tag = indexPath.section * 1000 + indexPath.row;
při načítání sekce a řádku,
Sekce NSInteger = (button.tag) / 1000;
Řádek NSInteger = (button.tag)% 1000;
|
Zkuste to...
- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath
{
statický NSString * CellIdentifier = @ "Buňka";
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: CellIdentifier];
}
UIButton * checkBox = [[UIButton alloc] initWithFrame: CGRectMake (280, 10, 50, 44)];
checkBox.backgroundColor = [UIColor oranžová barva];
[checkBox addTarget: self action: @selector (checkBoxClicked: event:) forControlEvents: UIControlEventTouchUpInside];
[checkBox setTag: indexPath.row];
[cell.contentView addSubview: checkBox];
návratová buňka;
}
- (void) checkBoxClicked: (id) sender event: (id) event
{
NSSet * touches = [událost allTouches];
UITouch * touch = [dotkne se libovolnéhoObjektu];
CGPoint currentTouchPosition = [touch locationInView: self.tv]; // zde tv je TableView Object
NSIndexPath * indexPath = [self.tv indexPathForRowAtPoint: currentTouchPosition];
NSLog (@ "hodnota indePath.section% d, indexPath.row% d", indexPath.section, indexPath.row);
}
|
To se děje proto, že přiřazujete tag tlačítkům NEZÁVISLÉ sekcí.
Oba první řádky sekcí A a S mají řádek = 0. takže značka přiřazená k jejich příslušnému tlačítku je 0. Měli byste jim přiřadit odkaz Zachovat odkaz na vaše sekce.
Navrhoval bych přiřadit nápovědu přístupnosti s čárkami odděleným formulářem obsahujícím sekci, řádek.
A ve vaší metodě
- (void) checkBoxClicked: (id) sender
{
// vybrat řetězec z formuláře odděleného čárkami. 1. je vaše sekce, 2. je řada.
}
druhou možností je Dělejte, co kdy děláte, a implementujte svou Button metodu takhle.
CGPoint buttonPosition = [odesílatel convertPoint: CGPointZero toView: self.tableView];
NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint: buttonPosition];
if (indexPath! = nil)
{
... indexpath.section je vaše sekce, index path.row je váš řádek.
}
Existuje také třetí možnost.
v cellforRowAtIndexpath přiřaďte svému tlačítku název
- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath
[btn setTitle: <# Your Row #> forState: UIControlStateDisabled];
[btn setTag <#Your Section #>];
takže při příjmu v metodě tlačítka můžete mít jak sekci (značku), tak řádek (název pro deaktivovaný stav).
- (void) checkBoxClicked: (id) sender {[button titleForState: UIControlStateDisabled]; // váš řádek
button.tag // your Section}
|
Zkuste to!
V každé sekci můžete znát počet sekcí vpravo, poté přidejte počet jednotlivých řádků.
[[fieldTitlesList objectAtIndex: indexPath.section - 1] počet] + indexPath.row
Kde fieldTitlesList je pole vašich sekcí.
|
Přidal jsem následující kód, který vyřešil můj problém
NSInteger rowNumber = 0;
pro (NSInteger i = 0; i